package com.ht.api.util;

import java.util.Arrays;

import com.ht.api.constant.Message;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.websocket.WebSocket;

import cn.hutool.extra.spring.SpringUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 消息通知工具类
 * @author asq
 * @createTime 2025年3月20日 08:40:16
 */
@Slf4j
public class NoticeUtil {
    private static WebSocket webSocket;
    
    /**
     * 发送消息通知
     * @param message 消息内容
     * @param type 消息类型
     * @param user 要通知的后台管理员数组
     */
	public static void send(String message, int type, String... user) {
		// 消息通知表
		Arrays.stream(user).forEach(u -> {
			Entity notice = Db.createEntity("sys_notice");
			notice.set("message", message);
			notice.set("type", type);
			notice.set("user", u);
			notice.set("is_read", 0);
			Db.insert(notice);
			
			// 推送websocket通知
			try {
				String socketMessage = Message.createMsg(Message.NOTICE, notice);
				getWebSocket().sendMessage(socketMessage, user);
			} catch (Exception e) {
				log.warn("[NoticeUtil]发送消息通知推送websocket时发生异常：{}", e.getMessage(), e);
			}
		});
		log.info("[NoticeUtil]构建消息通知成功，type：{}，message：{}", type, message);
	}
    
    /**
     * 获取websocket对象
     * @return
     */
    private static WebSocket getWebSocket() {
    	if (webSocket == null) {
    		webSocket = SpringUtil.getBean(WebSocket.class);
    	}
    	return webSocket;
    }
}
